package com.hch.service;

import com.hch.domain.Blog;
import com.hch.vo.BlogQuery;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

public interface BlogService {

    /**
     * 根据id查询博客信息
     *
     * @param id
     * @return
     */
    Blog getBlog(Long id);

    /**
     * 获取并转化markdown内容后的博客
     *
     * @param id
     * @return
     */
    Blog getAndCovertBlog(Long id);

    /**
     * 分页查询
     *
     * @param pageable
     * @return
     */
    Page<Blog> listBlog(Pageable pageable, BlogQuery blogQuery);

    /**
     * 获取所有博客并分页
     *
     * @return
     */
    Page<Blog> listBlog(Pageable pageable);

    /**
     * 通过标签的id返回相应的博客分页内容
     *
     * @param tagId
     * @param pageable
     * @return
     */
    Page<Blog> listBlogByTagId(Long tagId, Pageable pageable);

    /**
     * 搜索博客方法
     *
     * @param query
     * @param pageable
     * @return
     */
    Page<Blog> listSearchBlog(String query, Pageable pageable);

    List<Blog> listRecommendTopBlog(Integer size);

    /**
     * 新增博客
     *
     * @param blog
     * @return
     */
    Blog saveBlog(Blog blog);

    /**
     * 更新博客
     *
     * @return
     */
    Blog updateBlog(Long id, Blog blog);

    /**
     * 删除博客
     *
     * @param id
     */
    void deleteBlog(Long id);

    /**
     * 对所有博客进行归档，不需要参数
     * @return
     */
    Map<String, List<Blog>> archiveBlog();

    /**
     * 获取博客总个数
     * @return
     */
    Long blogCount();
}
